/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.upc.dai.grupovictor.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import pe.edu.upc.dai.grupovictor.dao.CicloDao;
import pe.edu.upc.dai.grupovictor.dao.util.ConnectionUtils;
import pe.edu.upc.dai.grupovictor.dao.util.DaoException;
import pe.edu.upc.dai.grupovictor.model.Ciclo;

public class CicloDaoImpl implements CicloDao {

    public Ciclo seleccionarPorPrimaryKey(Long idCiclo) {
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        Ciclo ciclo = null;
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.prepareStatement("select * from CICLO where ID_CICLO=?");
            st.setLong(1, idCiclo);
            rs = st.executeQuery();
            if (rs.next()) {
                ciclo = new Ciclo();
                ciclo.setCodigoExterno(rs.getString("CODIGO_EXTERNO"));
                ciclo.setIdCiclo(rs.getLong("ID_CICLO"));
                ciclo.setNombreCiclo(rs.getString("NOMBRE_CICLO"));

            }
        } catch (SQLException e) {
            throw new DaoException(e);
        } finally {
            ConnectionUtils.closeResultSet(rs);
            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
        }
        return ciclo;
    }

    public Ciclo seleccionarPorNombre(String nombre) {
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        Ciclo ciclo = null;
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.prepareStatement("select * from CICLO where CODIGO_EXTERNO=?");
            st.setString(1, nombre);
            rs = st.executeQuery();
            if (rs.next()) {
                ciclo = new Ciclo();
                ciclo.setCodigoExterno(rs.getString("CODIGO_EXTERNO"));
                ciclo.setIdCiclo(rs.getLong("ID_CICLO"));
                ciclo.setNombreCiclo(rs.getString("NOMBRE_CICLO"));

            }
        } catch (SQLException e) {
            throw new DaoException(e);
        } finally {
            ConnectionUtils.closeResultSet(rs);
            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
        }
        return ciclo;
    }

    public void insertar(Ciclo ciclo) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void actualizar(Ciclo ciclo) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void eliminar(Ciclo ciclo) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public List<Ciclo> seleccionarTodos() {
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        Ciclo ciclo = null;
        List<Ciclo> lista = new ArrayList<Ciclo>();
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.prepareStatement("Select * from CICLO");
            rs = st.executeQuery();
            while (rs.next()) {
                ciclo = mapResultSet(rs);
                lista.add(ciclo);
            }
        } catch (SQLException e) {
            throw new DaoException(e);
        } finally {
            ConnectionUtils.closeResultSet(rs);
            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
        }
        return lista;
    }

    private Ciclo mapResultSet(ResultSet rs) throws SQLException {
        Ciclo ciclo = new Ciclo();
        ciclo.setCodigoExterno(rs.getString("CODIGO_EXTERNO"));
        ciclo.setIdCiclo(rs.getLong("ID_CICLO"));
        ciclo.setNombreCiclo(rs.getString("NOMBRE_CICLO"));

        return ciclo;
    }
}
